﻿var tableSort = function () {
    this.initialize.apply(this, arguments);
}
tableSort.prototype = {
    initialize: function (tableId, clickRow, startRow, endRow, classUp, classDown, selectClass) {

        $("#tbList").find("thead").find("tr").find("td").css("cursor", "pointer")
        this.Table = document.getElementById(tableId);
        if (this.Table == null) {
            return;
        }
        this.rows = this.Table.rows; //所有行 
        var nosort = 0;
        if ($("#" + tableId + "").find("tr").last().html().indexOf("合计") != -1) {
            nosort = this.rows.length - 1;
        } else {
            nosort = this.rows.length;
        }
        this.Tags = this.rows[clickRow - 1].cells; //标签td 
        this.up = classUp;
        this.down = classDown;
        this.startRow = startRow;
        this.selectClass = selectClass;
        this.endRow = nosort; //(endRow == 999 ? this.rows.length : endRow);
        this.T2Arr = this._td2Array(); //所有受影响的td的二维数组 
        this.setShow();
    },
    //设置标签切换 
    setShow: function () {
        var defaultClass = this.Tags[0].className;
        for (var Tag, i = 0; Tag = this.Tags[i]; i++) {
            Tag.index = i;
            addEventListener(Tag, 'click', Bind(Tag, statu));
        }
        var _this = this;
        var turn = 0;
        function statu() {
            $("#tbList").find("thead").find("tr").find("td").find("a").remove()
            //            // $(this).css("cursor", "pointer");
            //            for (var i = 0; i < _this.Tags.length; i++) {
            //                _this.Tags[i].className = defaultClass;
            //            }
            if (turn == 0) {
                //                $(this).append('<img src="../../../images/up.png" id="image1" style="width: 15px; height: 18px; background-repeat: no-repeat; background-position: center 50%; vertical-align: middle !important" class=".icon-calculator" />');
                $(this).append("<a style='color:Red'>↑</a>");
                _this.startArray(0, this.index);
                turn = 1;
            } else {
                $(this).append("<a style='color:Red'>↓</a>");

                //                $(this).append('<img src="../../../images/down.png" id="image1" style="width: 15px; height: 18px; background-repeat: no-repeat; background-position: center 50%; vertical-align: middle !important" class=".icon-calculator" />');
                //  addClass(this, _this.up)
                _this.startArray(1, this.index);
                turn = 0;
            }
        }
    },
    //    //设置选中列样式 
    //    colClassSet: function (num, cla) {
    //        //得到关联到的td 
    //        for (var i = (this.startRow - 1); i < (this.endRow); i++) {
    //            for (var n = 0; n < this.rows[i].cells.length; n++) {
    //                removeClass(this.rows[i].cells[n], cla);
    //            }
    //            addClass(this.rows[i].cells[num], cla);
    //        }
    //   },
    //开始排序 num 根据第几列排序 aord 逆序还是顺序 
    startArray: function (aord, num) {
        var afterSort = this.sortMethod(this.T2Arr, aord, num); //排序后的二维数组传到排序方法中去 
        this.array2Td(num, afterSort); //输出 
    },
    //将受影响的行和列转换成二维数组 
    _td2Array: function () {
        var arr = [];
        for (var i = (this.startRow - 1), l = 0; i < (this.endRow); i++, l++) {
            arr[l] = [];
            for (var n = 0; n < this.rows[i].cells.length; n++) {

                arr[l].push(this.rows[i].cells[n].innerHTML);
            }
        }
        return arr;
    },
    //根据排序后的二维数组来输出相应的行和列的 innerHTML 
    array2Td: function (num, arr) {
        // this.colClassSet(num, this.selectClass);
        for (var i = (this.startRow - 1), l = 0; i < (this.endRow); i++, l++) {
            for (var n = 0; n < this.Tags.length; n++) {
                this.rows[i].cells[n].innerHTML = arr[l][n];
            }
        }
    },
    //传进来一个二维数组，根据二维数组的子项中的w项排序，再返回排序后的二维数组 
    sortMethod: function (arr, aord, w) {
        //var effectCol = this.getColByNum(whichCol); 
        arr.sort(function (a, b) {
            x = killHTML(a[w]);
            y = killHTML(b[w]);
            x = $.trim(x.replace(/,/g, ''));
            y = $.trim(y.replace(/,/g, ''));
            if (x == "") {
                x = "a";
            }
            if (y == "") {
                y = "a";
            }

            switch (isNaN(x)) {
                case false:
                    return Number(x) - Number(y);
                    break;
                case true:
                    return x.localeCompare(y);
                    break;
            }
        });
        arr = aord == 0 ? arr : arr.reverse();
        return arr;
    }
}
/*-----------------------------------*/
function addEventListener(o, type, fn) {
    if (o.attachEvent) { o.attachEvent('on' + type, fn) }
    else if (o.addEventListener) { o.addEventListener(type, fn, false) }
    else { o['on' + type] = fn; }
}

function hasClass(element, className) {
    var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
    return element.className.match(reg);
}

//function addClass(element, className) {
//    if (!this.hasClass(element, className)) {
//        element.className += " " + className;
//    }
//}

//function removeClass(element, className) {
//    if (hasClass(element, className)) {
//        var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
//        element.className = element.className.replace(reg, ' ');
//    }
//}

var Bind = function (object, fun) {
    return function () {
        return fun.apply(object, arguments);
    }
}
//去掉所有的html标记 
function killHTML(str) {
    return str.replace(/<\/?.+?>/g, "");
}
//------------------------------------------------ 
//tableid 第几行是标签行，从第几行开始排序，第几行结束排序(999表示最后) 升序标签样式，降序标签样式 选中列样式 
//注意标签行的class应该是一致的


































//$(function () {
//    $("#tbList").find("thead").find("tr").find("td").each(function (index, value) {
//        $(this).css("cursor", "pointer");
//        $(this).click(function () {
//            sortt("" + index + "", index)
//        })
//    })
//})
//function delHtmlTag(str) {

//    return str.replace(/<\/?.+?>/g, ""); //去掉所有的html标记
//}

//var flag = "DESC";
////--------------------- 排序
////需要在排序的table上加id="tbList"
//function sortt(className, tdIndex) {
//    var listName = new Array();
//    var listNameOld = new Array();
//    var listTr = new Array();
//    var listSort = new Array();
//    var i = 1;
//    var b = false;
//    var hjhtml = ""
//    //取得原来的<tr>,并清空<table>
//    $("#tbList tr").each(function () {
//        if ($(this).find("td").eq(0).text().indexOf('合计') == -1) {
//            if ($(this).html() != undefined) {
//                listTr.push($(this).html());
//            }
//        } else {
//            hjhtml = $(this).html();
//        }
//    });
//    //得到要排列的列的元素，并在末尾追加此刻的顺序（从1开始）
//    $("#tbList").find("tbody").find("tr").each(function () {
//        if ($(this).find("td").eq(0).html().indexOf('合计') == -1) {
//            var text = $(this).find("td").eq(className).html();
//            listName.push(delHtmlTag(text) + i);
//            listNameOld.push(delHtmlTag(text) + i);
//        }
//        i++;
//    })
//    //将要排序的元素排序
//    mySort(listName, flag);
//    //判断排序后元素位置是否发生变化
//    for (var j = 0; j < listName.length; j++) {
//        if (listName[j].substring(listName[j].length - listNameOld[j].length) != listNameOld[j]) {
//            b = true;
//            break;
//        }
//    }
//    //排序后，根据先前追加的顺序得到此时<tr>的顺序
//    for (var j = 0; j < listName.length; j++) {
//        var text = listName[j].substring(0, listName[j].length - 1)
//        for (var m = 0; m < listNameOld.length; m++) {
//         

//        }

//        listSort.push(parseInt(listName[j].substring(listName[j].length - 1)));
//    }

//    $("#tbList").html('');
//    //按顺序追加<tr>，若排序后元素顺序未变化，则倒序追加
//    $("#tbList").append("<thead><tr>" + listTr[0] + "</tr></thead><tbody>");
//    if (b) {

//        for (var j = 0; j < listSort.length; j++) {
//            $("#tbList").append("<tr>" + listTr[listSort[j]] + "</tr>");
//        }
//    } else {

//        for (var j = listSort.length - 1; j >= 0; j--) {
//            $("#tbList").append("<tr>" + listTr[listSort[j]] + "</tr>");
//        }
//    }
//    if (hjhtml !== "") {
//        $("#tbList tr:last").after("<tr>" + hjhtml + "</tr>");
//    }
//    $("#tbList").before("</tbody>");
//    $("#tbList").find("thead").find("tr").find("td").each(function (index, value) {
//        $(this).css("cursor", "pointer");
//        $(this).find("img").remove();
//        if (index == tdIndex) {
//            if (flag == "DESC") {
//                $(this).append('<img src="../../../images/up.png" id="image1" style="width: 15px; height: 18px; background-repeat: no-repeat; background-position: center 50%; vertical-align: middle !important" class=".icon-calculator" />');
//                flag = "ASC"
//            } else {
//                $(this).append('<img src="../../../images/down.png" id="image1" style="width: 15px; height: 18px; background-repeat: no-repeat; background-position: center 50%; vertical-align: middle !important" class=".icon-calculator" />');
//                flag = "DESC"
//            }
//        }
//        $(this).click(function () {
//            sortt("" + index + "", index)
//        })
//    })
//}

////首先按字符个数排序，然后按相对应的字符大小排序
//function mySort(list, flag) {
//    var len = 0;
//    var add = "";
//    for (var i = 0; i < list.length; i++) {
//        var str = list[i];
//        if (str.length > len) {
//            len = str.length;
//        }
//    }
//    for (var i = 0; i < len; i++) {
//        add += "0"
//    }
//    if (flag == "ASC") {
//        for (var i = 0; i < list.length; i++) {
//            var strOne = add + list[i];
//            list[i] = strOne.substring(strOne.length - len);
//        }
//    } else {
//        for (var i = list.length; i < 0; i--) {
//            var strOne = add + list[i];
//            list[i] = strOne.substring(strOne.length - len);
//        }
//    }
//    list.sort();
//}